昨天我們已經將Topic註冊到管理網站了,我們今天就來新增一個主題~
首先先進入我們的網頁到看到Topic然後按旁邊的Add
進去會看到text可以給我們輸入要新增主題的名稱,在這裡我是輸入MIIA(醫學資訊),輸入完後按save我們就可以開始寫程式了
這裡是要定義一個Entry模型可以記錄我們新增主題後在裡面打的內容
首先先打開models.py檔,然後輸入下面的程式碼
from django.db import models
class Topic(models.Model):
--省略--
# 以下為新增區塊
class Entry(models.Model):
topic = models.ForeignKey(Topic,on_delete=models.CASCADE)
text = models.TextField()
date_added = models.DateTimeField(auto_now_add=True)
class Meta:
verbose_name_plural = 'entries'
def __str__(self):
return self.text
上面程式碼第七行是在說第一個topic是個ForeignKey實例,foreignkey是資料庫的術語,它參照了資料庫中的另一筆紀錄,每個主題在建立時,都會為它分配一個鍵,我們會依照關聯的鍵來取得主題的相關紀錄
上面程式碼第十一行是把Meta類別嵌入到Entry類別中,在這裡它允許我們設定一個特殊屬性來告訴Django在需要引用多個條目時使用Entries
因為我們新增了一個模型,所以需要再次遷移資料庫,這上次我們也有做過了,它的流程大概是
models.py
python manage.py makemigrations learning_logs
python manage.py migrate
如下圖,我們成功create Entry模型
我們需要登入註冊Enrty模型就必須開啟admin.py然後須入下列程式碼
from django.contrib import admin
# Register your models here.
from learning_logs.models import Topic,Entry # 新增區塊
admin.site.register(Topic)
admin.site.register(Entry) # 新增區塊
輸入完程式碼後我們就可以再次開啟我們的網頁,我們會看到多了一個Entries,然後要新增內容的話我們可以點Entries或是點它旁邊的Add鍵
點進去後會是這個畫面,我們再點右上角的ADD ENTRY
點進去ADD ENTRY後會看到下面這個畫面,然後有一個下拉式選單點開後會看到我們一開始新增的MIIA項,我們可以選取MIIA後在下面的text區塊新增內容,新增完後再按SAVE就可以了
輸入完資料後我們可利用互動式的終端對話模式,以編寫程式的方式來查看這些資料,如下圖
上圖的黃色指令是從虛擬環境切換到Django shell模式,如果要跳開shell模式回到虛擬環境,在Windows系統是要按下Ctrl+z再按下Enter鍵
而上圖綠色的部分在一開始我們匯入了earning_logs.models中的Topic模型,然後用Topic.objects.all()方法來取得Topic模組中的所有實例,再來我們可以用物件ID來查看它的屬性值,因為這裡我們只有新增一個MIIA,所以ID值是1,可以用它來看我們在Topic定義的text屬性,當然也可以看它的date_added屬性,只要輸入t.date_added就可以囉!
附上排版較精美的
HackMD網址:https://hackmd.io/dltcncZBRpWkR3VxjSVkFQ
資料來源:<<python程式設計的樂趣>>-Eric Matthes著/H&C譯